home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Hottest 6
/
Hottest 6 (1996)(PDSoft)[!].iso
/
software
/
emulators
/
frodo_1.5
/
src
/
main.asm
< prev
next >
Wrap
Assembly Source File
|
1978-11-24
|
37KB
|
1,784 lines
*
* Main.asm - Hauptprogramm des C64-Emulators/Einstellungsfenster
*
* Copyright (C) 1994-1995 by Christian Bauer
*
MACHINE 68020
INCLUDE "exec/types.i"
INCLUDE "exec/macros.i"
INCLUDE "exec/memory.i"
INCLUDE "exec/execbase.i"
INCLUDE "dos/dos.i"
INCLUDE "dos/dosextens.i"
INCLUDE "intuition/intuition.i"
INCLUDE "intuition/intuitionbase.i"
INCLUDE "graphics/displayinfo.i"
INCLUDE "libraries/gadtools.i"
INCLUDE "libraries/asl.i"
INCLUDE "libraries/locale.i"
INCLUDE "cybergraphics/cybergraphics.i"
INCLUDE "workbench/workbench.i"
INCLUDE "workbench/startup.i"
INCLUDE "FrodoPrefs.i"
INCLUDE "Frodo_rev.i"
CATCOMP_NUMBERS = 1
INCLUDE "Strings.i"
XREF _SysBase ;AStartup
XREF _DOSBase
XREF _WBenchMsg
XDEF _main
XDEF _UtilityBase
XDEF _IntuitionBase
XDEF _GfxBase
XDEF _GadToolsBase
XDEF _AslBase
XDEF _EGSBase
XDEF _VilIntuiBase
XDEF _CyberGfxBase
XDEF _HRGSystemBase
XDEF _CiaBase
XDEF _MiscBase
XDEF _SID6581Base
XDEF MainTask
XDEF ShowPrefs
XDEF Random
XREF PrefsNGads
XDEF TheLocale ;Strings.o
XREF GetString
XREF TheRAM ;6510.asm
XREF TheBasic
XREF TheKernal
XREF TheChar
XREF TheColor
XREF Init6510
XREF Start6510
XREF Stop6510
XREF Wait6510
XREF Pause6510
XREF Resume6510
XREF Localize6510
XREF Reset6526 ;6526.asm
XREF ChangedKeys
XREF CIACycles
XREF Joystick1On
XREF Joystick2On
XREF JoystickSwap
XREF KeyboardYZ
XREF OpenGraphics ;6569.asm
XREF CloseGraphics
XREF WaitForClick
XREF AmigaToFront
XREF EmulToFront
XREF DisplayID
XREF ScreenType
XREF NormalCycles
XREF BadLineCycles
XREF Collisions
XREF Overscan
XREF SkipLatch
XDEF TurboCyber
XREF Reset6581 ;6581.asm
XREF ChangedSID
XREF PauseSound
XREF ResumeSound
XREF CloseSID
XREF UseSIDCard
XREF Open1541 ;1541.asm
XREF Close1541
XREF ChangedDirs
XREF CloseIEC
XREF ChangedIEC
XREF Dir8
XREF Dir9
XREF Dir10
XREF Dir11
XREF Drv8IsIEC
XREF Drv9IsIEC
XREF Drv10IsIEC
XREF Drv11IsIEC
XREF OtherIEC
XREF MapSlash
SECTION "CODE",CODE
**
** Definitionen
**
; CyberGfx
CModeRequest = -66
**
** Makros
**
; LongInt-Wert aus Integer-Gadget a0 lesen
GetInt MACRO ;Ziel
move.l gg_SpecialInfo(a0),a0
move.l si_LongInt(a0),\1
ENDM
**
** Hauptprogramm
**
MACHINE 68000
; Task holen
_main move.l _SysBase,a6
sub.l a1,a1
JSRLIB FindTask
move.l d0,MainTask
; Libraries öffnen
moveq #37,d0
lea UtilityName,a1
JSRLIB OpenLibrary
move.l d0,_UtilityBase
beq NoUtility
moveq #37,d0
lea IntuiName,a1
JSRLIB OpenLibrary
move.l d0,_IntuitionBase
beq NoIntui
moveq #37,d0
lea GfxName,a1
JSRLIB OpenLibrary
move.l d0,_GfxBase
beq NoGfx
moveq #37,d0
lea GadToolsName,a1
JSRLIB OpenLibrary
move.l d0,_GadToolsBase
beq NoGadTools
moveq #38,d0
lea AslName,a1
JSRLIB OpenLibrary
move.l d0,_AslBase
beq NoAsl
moveq #37,d0
lea IconName,a1
JSRLIB OpenLibrary
move.l d0,_IconBase
beq NoIcon
moveq #0,d0
lea SID6581Name,a1
JSRLIB OpenLibrary
move.l d0,_SID6581Base
lea CiaResName,a1
JSRLIB OpenResource
move.l d0,_CiaBase
beq NoCiaRes
lea MiscResName,a1
JSRLIB OpenResource
move.l d0,_MiscBase
beq NoMiscRes
; Locale öffnen und Catalog laden
move.l _SysBase,a6
moveq #37,d0
lea LocaleName,a1
JSRLIB OpenLibrary
move.l d0,_LocaleBase
beq 10$
move.l d0,a6
sub.l a0,a0
lea CatalogName,a1
sub.l a2,a2
JSRLIB OpenCatalogA
move.l d0,TheCatalog
; Datenstrukturen lokalisieren
10$ bsr Localize
bsr Localize6510
; 68020 vorhanden?
move.l _SysBase,a0
move.w AttnFlags(a0),d0
btst #AFB_68020,d0
beq No68020Exit
MACHINE 68020
; Argumente auswerten: Vom CLI gestartet?
move.l MainTask,a0
tst.l pr_CLI(a0)
beq 1$
; Ja, ReadArgs benutzen
move.l _DOSBase,a6
move.l #Template,d1
move.l #TurboCyber,d2 ;Erstes Argument
moveq #0,d3
JSRLIB ReadArgs
move.l d0,d1 ;NULL ist OK
JSRLIB FreeArgs
bra 2$
; Von der Workbench gestartet, ToolTypes lesen
1$ move.l _IconBase,a6
move.l _WBenchMsg,a0
move.l sm_ArgList(a0),a0
move.l wa_Name(a0),a0
JSRLIB GetDiskObject
tst.l d0
beq 2$
move.l d0,a2
move.l a2,a0
move.l do_ToolTypes(a0),a0
lea TurboToolType,a1
JSRLIB FindToolType
tst.l d0
beq 3$
move.l #-1,TurboCyber
3$ move.l a2,a0
JSRLIB FreeDiskObject
2$
; ScreenMode- und Directory-Requester holen
move.l _AslBase,a6
moveq #ASL_ScreenModeRequest,d0
lea ScreenReqTags,a0
JSRLIB AllocAslRequest
move.l d0,ScreenRequester
beq NoMemExit
moveq #ASL_FileRequest,d0
lea DirReqTags,a0
JSRLIB AllocAslRequest
move.l d0,DirRequester
beq NoMemExit
; Zufallszahlengenerator initialisieren
move.l _IntuitionBase,a0
move.l ib_Micros(a0),RandomSeed
; Vorgegebene Einstellungen
move.w #63,PNormalCycles
move.w #23,PBadLineCycles
move.w #63,PCIACycles
clr.w PJoystick1On
move.w #-1,PJoystick2On
clr.w PJoystickSwap
clr.l PDisplayID
clr.w PScreenType
clr.b PDir8
clr.b PDir9
clr.b PDir10
clr.b PDir11
clr.w PUseSIDCard
clr.w KeyboardYZ
move.w #-1,PCollisions
move.w #-1,PMapSlash
move.w #-1,PFastReset
move.w #OSCAN_TEXT,POverscan
move.w #1,PSkipLatch
; Einstellungen laden
move.l _DOSBase,a6
move.l #PrefsFileName,d1
move.l #MODE_OLDFILE,d2
JSRLIB Open
move.l d0,d7
beq NoEmulPrefs
move.l d7,d1
move.l #ThePrefs,d2
move.l #PrefsLength,d3
JSRLIB Read
move.l d7,d1
JSRLIB Close
NoEmulPrefs
; Einstellungsfenster darstellen
clr.w PrefsFromEmul
bsr DoThePrefs
; Einstellungen übernehmen, wenn OK geklickt, sonst beenden
tst.l d7
beq Exit
bsr SetPrefs
; Dateikram vorbereiten
jsr Open1541
jsr ChangedIEC
bsr IECErrorReq
; Speicher für alles holen (die unteren Worte müssen mit den C64-Adressen
; übereinstimmen, außer CharROM)
move.l _SysBase,a6
move.l #$30000,d0 ;192K
move.l #MEMF_ANY|MEMF_CLEAR,d1
JSRLIB AllocVec
move.l d0,RAMBlock
beq NoMemExit
add.l #$ffff,d0 ;Auf xxxx0000 bringen
clr.w d0
move.l d0,TheRAM
add.l #$11000,d0
move.l d0,TheChar ;yyyy1000
add.l #$9000,d0
move.l d0,TheBasic ;yyyya000
add.l #$3800,d0
move.l d0,TheColor ;yyyyd800
add.l #$0800,d0
move.l d0,TheKernal ;yyyye000
; Opcodes $d2 (Wraparound) ab $10000 installieren,
; für den Fall, daß ein Programm über $ffff springt
move.l TheRAM,a0
lea $10000(a0),a0
moveq #256/4-1,d0
1$ move.l #$d2d2d2d2,(a0)+
dbra d0,1$
; ROMs laden
move.l _DOSBase,a6
move.l #BasicFileName,d1 ;Basic
move.l #MODE_OLDFILE,d2
JSRLIB Open
move.l d0,d7
beq NoBasicExit
move.l d0,d1
move.l TheBasic,d2
move.l #$2000,d3
JSRLIB Read
move.l d7,d1
JSRLIB Close
move.l #KernalFileName,d1 ;Kernal
move.l #MODE_OLDFILE,d2
JSRLIB Open
move.l d0,d7
beq NoKernalExit
move.l d0,d1
move.l TheKernal,d2
move.l #$2000,d3
JSRLIB Read
move.l d7,d1
JSRLIB Close
move.l #CharFileName,d1 ;Char
move.l #MODE_OLDFILE,d2
JSRLIB Open
move.l d0,d7
beq NoCharExit
move.l d0,d1
move.l TheChar,d2
move.l #$1000,d3
JSRLIB Read
move.l d7,d1
JSRLIB Close
; Betriebssystem patchen
move.l TheKernal,a0
move.w #$f200,$0d40(a0) ;IECOut
move.w #$f201,$0d23(a0) ;IECOutATN
move.w #$f202,$0d36(a0) ;IECOutSec
move.w #$f203,$0e13(a0) ;IECIn
move.w #$f204,$0def(a0) ;IECSetATN
move.w #$f205,$0dbe(a0) ;IECRelATN
move.w #$f206,$0dcc(a0) ;IECTurnaround
move.w #$f207,$0e03(a0) ;IECRelease
bsr PatchReset
; Bildschirm öffnen
jsr OpenGraphics
cmp.l #1,d0
beq NoScreenExit
cmp.l #2,d0
beq NoMemExit
cmp.l #3,d0
beq NoEGSExit
cmp.l #4,d0
beq NoVilIntuiExit
cmp.l #5,d0
beq NoDisplayIDExit
cmp.l #6,d0
beq ScrTooSmallExit
cmp.l #7,d0
beq NoCyberGfxExit
cmp.l #8,d0
beq NoCyberModeExit
cmp.l #9,d0
beq NoHRGExit
; Alles initialisieren
jsr Reset6526
jsr Reset6581
jsr Init6510
; 6510 starten
jsr Start6510
tst.l d0
bne NoMemExit
; Auf Mausklick warten
jsr WaitForClick
; Programm beenden
bra Exit
*
* Fehlerbehandlung/Beenden
*
MACHINE 68000
No68020Exit moveq #MSG_NO68020,d0
lea TheLocale,a0
jsr GetString
lea ErrorReq,a1
move.l d0,es_TextFormat(a1)
sub.l a0,a0
sub.l a2,a2
sub.l a3,a3
move.l _IntuitionBase,a6
JSRLIB EasyRequestArgs
bra NoCiaRes
MACHINE 68020
NoMemExit moveq #MSG_NOMEM,d0
bra ReqExit
NoScreenExit moveq #MSG_NOSCREEN,d0
bra ReqExit
NoEGSExit moveq #MSG_NOEGS,d0
bra ReqExit
NoVilIntuiExit moveq #MSG_NOVILINTUI,d0
bra ReqExit
NoCyberGfxExit moveq #MSG_NOCYBERGFX,d0
bra ReqExit
NoHRGExit moveq #MSG_NOHRG,d0
bra ReqExit
NoDisplayIDExit moveq #MSG_NODISPLAYID,d0
bra ReqExit
NoCyberModeExit moveq #MSG_NOCYBERMODE,d0
bra ReqExit
ScrTooSmallExit moveq #MSG_SCRTOOSMALL,d0
bra ReqExit
NoKernalExit moveq #MSG_NOKERNAL,d0
bra ReqExit
NoBasicExit moveq #MSG_NOBASIC,d0
bra ReqExit
NoCharExit moveq #MSG_NOCHAR,d0
ReqExit lea TheLocale,a0
jsr GetString
lea ErrorReq,a1
move.l d0,es_TextFormat(a1)
sub.l a0,a0
sub.l a2,a2
sub.l a3,a3
move.l _IntuitionBase,a6
JSRLIB EasyRequestArgs
Exit jsr Stop6510
jsr Reset6581 ;Stoppt diesen Lärm!
jsr CloseSID
jsr CloseGraphics
jsr CloseIEC
jsr Close1541
move.l _SysBase,a6
move.l RAMBlock,d0
beq 1$
move.l d0,a1
JSRLIB FreeVec
1$ move.l DirRequester,d0
beq 2$
move.l _AslBase,a6
move.l d0,a0
JSRLIB FreeAslRequest
2$ move.l ScreenRequester,d0
beq 3$
move.l _AslBase,a6
move.l d0,a0
JSRLIB FreeAslRequest
3$
MACHINE 68000
NoMiscRes
NoCiaRes move.l _SysBase,a6
move.l _SID6581Base,d0
beq NoSID6581
move.l d0,a1
JSRLIB CloseLibrary
NoSID6581 move.l _CyberGfxBase,d0
beq NoCyberGfx
move.l d0,a1
JSRLIB CloseLibrary
NoCyberGfx move.l _HRGSystemBase,d0
beq NoHRG
move.l d0,a1
JSRLIB CloseLibrary
NoHRG move.l _VilIntuiBase,d0
beq NoVilIntui
move.l d0,a1
JSRLIB CloseLibrary
NoVilIntui move.l _EGSBase,d0
beq NoEGS
move.l d0,a1
JSRLIB CloseLibrary
NoEGS move.l _LocaleBase,d0 ;Catalog schließen
beq NoLocale
move.l d0,a6
move.l TheCatalog,a0
JSRLIB CloseCatalog
move.l a6,a1
move.l _SysBase,a6
JSRLIB CloseLibrary
NoLocale move.l _IconBase,a1
JSRLIB CloseLibrary
NoIcon move.l _AslBase,a1
JSRLIB CloseLibrary
NoAsl move.l _GadToolsBase,a1
JSRLIB CloseLibrary
NoGadTools move.l _GfxBase,a1
JSRLIB CloseLibrary
NoGfx move.l _IntuitionBase,a1
JSRLIB CloseLibrary
NoIntui move.l _UtilityBase,a1
JSRLIB CloseLibrary
NoUtility moveq #0,d0
rts
MACHINE 68020
**
** Je nach Zustand von FastReset den Speichertest aus dem ROM entfernen
**
PatchReset move.l TheKernal(pc),a0
tst.w FastReset
bne 1$
move.w #$d0e8,$1d84(a0)
rts
1$ move.w #$a000,$1d84(a0)
rts
**
** Preferences
**
*
* Preferences aus dem Emulator heraus
*
; C64 anhalten und nach hinten legen
ShowPrefs jsr Pause6510
jsr PauseSound
jsr AmigaToFront
; Aktuelle Preferences holen
bsr GetPrefs
; Fenster öffnen und handhaben
move.w #-1,PrefsFromEmul
bsr DoThePrefs
; Prefs setzen, wenn OK geklickt
tst.l d7
beq 1$
bsr SetPrefs
jsr ChangedDirs ;Die stehen hier (und nicht in SetPrefs),
jsr ChangedIEC ; weil beim ersten Aufruf von SetPrefs
bsr IECErrorReq ; noch nicht alles initialisiert ist
bsr PatchReset
1$
; C64 nach vorn holen und wieder starten
jsr EmulToFront
jsr ResumeSound
jsr Resume6510
rts
*
* Handhabung des Preferences-Fensters
*
; Fenster öffnen
DoThePrefs jsr SetupScreen
tst.l d0
bne PrefsError
jsr OpenPrefsWindow
tst.l d0
bne PrefsError
bsr SetGadgets
move.l PrefsWnd,ScreenReqWindow
move.l PrefsWnd,DirReqWindow
; EventLoop
EventLoop move.l _SysBase,a6
move.l PrefsWnd,a0
move.l wd_UserPort(a0),a0
JSRLIB WaitPort
GetEvent move.l _GadToolsBase,a6
move.l PrefsWnd,a0
move.l wd_UserPort(a0),a0
JSRLIB GT_GetIMsg
tst.l d0
beq EventLoop
move.l d0,a1
move.l im_Class(a1),TheClass
move.w im_Code(a1),TheCode
move.l im_IAddress(a1),TheGadget
JSRLIB GT_ReplyIMsg
; Klasse auswerten
move.l TheClass,d0
and.l #IDCMP_GADGETUP,d0
beq NotGadget
; GadgetUp
move.l TheGadget,a0
; OK
cmp.w #GD_OK,gg_GadgetID(a0)
bne 1$
moveq #-1,d7
bra PrefsDone
; Cancel
1$ cmp.w #GD_Cancel,gg_GadgetID(a0)
bne 2$
moveq #0,d7
bra PrefsDone
; Save
2$ cmp.w #GD_Save,gg_GadgetID(a0)
bne 4$
bsr SaveThePrefs
bra GetEvent
; Joystick1On
4$ cmp.w #GD_Joystick1On,gg_GadgetID(a0)
bne 5$
not.w PJoystick1On
bra GetEvent
; Joystick2On
5$ cmp.w #GD_Joystick2On,gg_GadgetID(a0)
bne 6$
not.w PJoystick2On
bra GetEvent
; JoystickSwap
6$ cmp.w #GD_JoystickSwap,gg_GadgetID(a0)
bne 7$
not.w PJoystickSwap
bra GetEvent
; GetDisplayID
7$ cmp.w #GD_GetDisplayID,gg_GadgetID(a0)
bne 8$
tst.w PrefsFromEmul ;Nur beim Start
bne GetEvent
cmp.w #4,PScreenType ;CyberGfx?
beq 71$
move.l _AslBase,a6 ;Nein
move.l ScreenRequester,a0
move.l PDisplayID,ScreenReqID
move.w POverscan,ScreenReqOScan+2
lea DoScreenReqTags,a1
JSRLIB AslRequest
tst.l d0
beq GetEvent
move.l ScreenRequester,a0
move.l sm_DisplayID(a0),PDisplayID
move.w sm_OverscanType(a0),POverscan
bsr SetDisplayIDGad
bra GetEvent
71$ tst.l _CyberGfxBase
bne 72$
move.l _SysBase,a6 ;Ja
moveq #40,d0
lea CyberGfxName,a1
JSRLIB OpenLibrary
move.l d0,_CyberGfxBase
beq GetEvent
72$ move.l _CyberGfxBase,a6
sub.l a0,a0
lea DoCyberReqTags,a1
move.l Scr,CyberReqScreen
jsr CModeRequest(a6)
tst.l d0
beq GetEvent
move.l d0,PDisplayID
bsr SetDisplayIDGad
bra GetEvent
; ScreenType
8$ cmp.w #GD_ScreenType,gg_GadgetID(a0)
bne 9$
tst.w PrefsFromEmul ;Nur beim Start
bne GetEvent
move.w TheCode,PScreenType
bra GetEvent
; Use SID Card
9$ cmp.w #GD_UseSIDCard,gg_GadgetID(a0)
bne 10$
not.w PUseSIDCard
bra GetEvent
; Drive 8 is on IEC cable
10$ cmp.w #GD_Drv8IsIEC,gg_GadgetID(a0)
bne 11$
not.w PDrv8IsIEC
beq 101$
lea DisableTags,a3
bra 102$
101$ lea EnableTags,a3
102$ lea PrefsGadgets,a0
move.l GDX_Dir8*4(a0),a0
move.l PrefsWnd,a1
sub.l a2,a2
JSRLIB GT_SetGadgetAttrsA
bra GetEvent
; Drive 9 is on IEC cable
11$ cmp.w #GD_Drv9IsIEC,gg_GadgetID(a0)
bne 12$
not.w PDrv9IsIEC
beq 111$
lea DisableTags,a3
bra 112$
111$ lea EnableTags,a3
112$ lea PrefsGadgets,a0
move.l GDX_Dir9*4(a0),a0
move.l PrefsWnd,a1
sub.l a2,a2
JSRLIB GT_SetGadgetAttrsA
bra GetEvent
; Drive 10 is on IEC cable
12$ cmp.w #GD_Drv10IsIEC,gg_GadgetID(a0)
bne 13$
not.w PDrv10IsIEC
beq 121$
lea DisableTags,a3
bra 122$
121$ lea EnableTags,a3
122$ lea PrefsGadgets,a0
move.l GDX_Dir10*4(a0),a0
move.l PrefsWnd,a1
sub.l a2,a2
JSRLIB GT_SetGadgetAttrsA
bra GetEvent
; Drive 11 is on IEC cable
13$ cmp.w #GD_Drv11IsIEC,gg_GadgetID(a0)
bne 14$
not.w PDrv11IsIEC
beq 131$
lea DisableTags,a3
bra 132$
131$ lea EnableTags,a3
132$ lea PrefsGadgets,a0
move.l GDX_Dir11*4(a0),a0
move.l PrefsWnd,a1
sub.l a2,a2
JSRLIB GT_SetGadgetAttrsA
bra GetEvent
; Get Directory for drive 8
14$ cmp.w #GD_GetDir8,gg_GadgetID(a0)
bne 15$
lea SetDir8Tags,a3
lea PDir8,a4
move.l #GD_Dir8,d4
bsr DoGetDirName
bra GetEvent
; Get Directory for drive 9
15$ cmp.w #GD_GetDir9,gg_GadgetID(a0)
bne 16$
lea SetDir9Tags,a3
lea PDir9,a4
move.l #GD_Dir9,d4
bsr DoGetDirName
bra GetEvent
; Get Directory for drive 10
16$ cmp.w #GD_GetDir10,gg_GadgetID(a0)
bne 17$
lea SetDir10Tags,a3
lea PDir10,a4
move.l #GD_Dir10,d4
bsr DoGetDirName
bra GetEvent
; Get Directory for drive 11
17$ cmp.w #GD_GetDir11,gg_GadgetID(a0)
bne 18$
lea SetDir11Tags,a3
lea PDir11,a4
move.l #GD_Dir11,d4
bsr DoGetDirName
bra GetEvent
; Use IEC cable for device numbers 4-15
18$ cmp.w #GD_OtherIEC,gg_GadgetID(a0)
bne 19$
not.w POtherIEC
bra GetEvent
; American keyboard layout
19$ cmp.w #GD_KeyboardYZ,gg_GadgetID(a0)
bne 20$
not.w PKeyboardYZ
bra GetEvent
; Enable sprite collisions
20$ cmp.w #GD_Collisions,gg_GadgetID(a0)
bne 21$
not.w PCollisions
bra GetEvent
; Map '/' character in file names to '\'
21$ cmp.w #GD_MapSlash,gg_GadgetID(a0)
bne 22$
not.w PMapSlash
bra GetEvent
; Skip memory test on reset
22$ cmp.w #GD_FastReset,gg_GadgetID(a0)
bne 23$
not.w PFastReset
bra GetEvent
23$ bra GetEvent
; Refresh
NotGadget move.l TheClass,d0
and.l #IDCMP_REFRESHWINDOW,d0
beq NotRefresh
move.l PrefsWnd,a0
JSRLIB GT_BeginRefresh
move.l PrefsWnd,a0
moveq #-1,d0
JSRLIB GT_EndRefresh
bra GetEvent
; Tastatur
NotRefresh move.l TheClass,d0
and.l #IDCMP_VANILLAKEY,d0
beq GetEvent
cmp.w #'o',TheCode ;O - OK
bne 1$
moveq #-1,d7
bra PrefsDone
1$ cmp.w #'s',TheCode ;S - Save
bne 2$
bsr SaveThePrefs
bra GetEvent
2$ cmp.w #'c',TheCode ;C - Cancel
bne 3$
moveq #0,d7
bra PrefsDone
3$ bra GetEvent
; Fertig mit den Prefs
PrefsDone bsr GetGadgets
jsr ClosePrefsWindow
PrefsError jsr CloseDownScreen
rts
*
* Auswahl eines Verzeichnisses
* a3: Zeiger auf Tags zum Ändern des zugehörigen Stringgadgets
* a4: Zeiger auf Puffer für Namen (256 Bytes)
* d4: ID des Stringgadgets, das anschließend geändert werden soll
*
DoGetDirName move.l a4,a0 ;Verzeichnisname kopieren
lea DirName,a1
moveq #256/4-1,d0
1$ move.l (a0)+,(a1)+
dbra d0,1$
move.l _AslBase,a6 ;Requester darstellen
move.l DirRequester,a0
lea DoDirReqTags,a1
JSRLIB AslRequest
tst.l d0
beq 3$
move.l DirRequester,a0 ;OK geklickt, Name zurückkopieren
move.l fr_Drawer(a0),a0
move.l a4,a1
moveq #256/4-1,d0
2$ move.l (a0)+,(a1)+
dbra d0,2$
move.l _GadToolsBase,a6 ;Name-Gadget neu setzen
lea PrefsGadgets,a0
move.l (a0,d4.w*4),a0
move.l PrefsWnd,a1
sub.l a2,a2 ;a3 enthält bereits den Zeiger auf die Tags
JSRLIB GT_SetGadgetAttrsA
3$ rts
*
* Gadgets setzen
*
SetCheckGad MACRO ;Name
tst.w P\1
beq \@1$
move.l GDX_\1*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetCheckTags,a3
JSRLIB GT_SetGadgetAttrsA
\@1$
ENDM
SetGadgets move.l _GadToolsBase,a6
lea PrefsGadgets,a5
move.l GDX_NormalCycles*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetIntegerTags,a3
moveq #0,d0
move.w PNormalCycles,d0
move.l d0,SetIntTagsVal
JSRLIB GT_SetGadgetAttrsA
move.l GDX_BadLineCycles*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetIntegerTags,a3
moveq #0,d0
move.w PBadLineCycles,d0
move.l d0,SetIntTagsVal
JSRLIB GT_SetGadgetAttrsA
move.l GDX_CIACycles*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetIntegerTags,a3
moveq #0,d0
move.w PCIACycles,d0
move.l d0,SetIntTagsVal
JSRLIB GT_SetGadgetAttrsA
move.l GDX_SkipLatch*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetIntegerTags,a3
moveq #0,d0
move.w PSkipLatch,d0
move.l d0,SetIntTagsVal
JSRLIB GT_SetGadgetAttrsA
SetCheckGad Joystick1On
SetCheckGad Joystick2On
SetCheckGad JoystickSwap
SetCheckGad UseSIDCard
SetCheckGad KeyboardYZ
SetCheckGad Collisions
SetCheckGad FastReset
SetCheckGad Drv8IsIEC
SetCheckGad Drv9IsIEC
SetCheckGad Drv10IsIEC
SetCheckGad Drv11IsIEC
SetCheckGad OtherIEC
SetCheckGad MapSlash
tst.w PDrv8IsIEC
beq 6$
move.l GDX_Dir8*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea DisableTags,a3
JSRLIB GT_SetGadgetAttrsA
6$ tst.w PDrv9IsIEC
beq 7$
move.l GDX_Dir9*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea DisableTags,a3
JSRLIB GT_SetGadgetAttrsA
7$ tst.w PDrv10IsIEC
beq 8$
move.l GDX_Dir10*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea DisableTags,a3
JSRLIB GT_SetGadgetAttrsA
8$ tst.w PDrv11IsIEC
beq 9$
move.l GDX_Dir11*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea DisableTags,a3
JSRLIB GT_SetGadgetAttrsA
9$ move.l GDX_ScreenType*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetCycleTags,a3
moveq #0,d0
move.w PScreenType,d0
move.l d0,SetCycTagsVal
JSRLIB GT_SetGadgetAttrsA
move.l GDX_Dir8*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetDir8Tags,a3
JSRLIB GT_SetGadgetAttrsA
move.l GDX_Dir9*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetDir9Tags,a3
JSRLIB GT_SetGadgetAttrsA
move.l GDX_Dir10*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetDir10Tags,a3
JSRLIB GT_SetGadgetAttrsA
move.l GDX_Dir11*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetDir11Tags,a3
JSRLIB GT_SetGadgetAttrsA
tst.w PrefsFromEmul ;Vom Emulator aufgerufen:
beq 1$ ; Bildschirmtyp und -modus
move.l GDX_GetDisplayID*4(a5),a0 ; ausschalten
move.l PrefsWnd,a1
sub.l a2,a2
lea DisableTags,a3
JSRLIB GT_SetGadgetAttrsA
move.l GDX_ScreenType*4(a5),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea DisableTags,a3
JSRLIB GT_SetGadgetAttrsA
1$ bra SetDisplayIDGad
*
* DisplayID-Gadget setzen
*
SetDisplayIDGad move.l _GfxBase,a6 ;DisplayID
sub.l a0,a0
lea ModeNameBuf,a1
moveq #nif_SIZEOF,d0
move.l #DTAG_NAME,d1
move.l PDisplayID,d2
JSRLIB GetDisplayInfoData
move.l _GadToolsBase,a6
lea PrefsGadgets,a0
move.l GDX_DisplayID*4(a0),a0
move.l PrefsWnd,a1
sub.l a2,a2
lea SetDIDTags,a3
JMPLIB GT_SetGadgetAttrsA
*
* Gadgets holen
*
GetGadgets lea PrefsGadgets,a1
move.l GDX_NormalCycles*4(a1),a0
GetInt d0
move.w d0,PNormalCycles
move.l GDX_BadLineCycles*4(a1),a0
GetInt d0
move.w d0,PBadLineCycles
move.l GDX_CIACycles*4(a1),a0
GetInt d0
move.w d0,PCIACycles
move.l GDX_SkipLatch*4(a1),a0
GetInt d0
move.w d0,PSkipLatch
move.l GDX_Dir8*4(a1),a0
move.l gg_SpecialInfo(a0),a0
move.l si_Buffer(a0),a0
lea PDir8,a2
moveq #256/4-1,d0
11$ move.l (a0)+,(a2)+
dbra d0,11$
move.l GDX_Dir9*4(a1),a0
move.l gg_SpecialInfo(a0),a0
move.l si_Buffer(a0),a0
lea PDir9,a2
moveq #256/4-1,d0
12$ move.l (a0)+,(a2)+
dbra d0,12$
move.l GDX_Dir10*4(a1),a0
move.l gg_SpecialInfo(a0),a0
move.l si_Buffer(a0),a0
lea PDir10,a2
moveq #256/4-1,d0
13$ move.l (a0)+,(a2)+
dbra d0,13$
move.l GDX_Dir11*4(a1),a0
move.l gg_SpecialInfo(a0),a0
move.l si_Buffer(a0),a0
lea PDir11,a2
moveq #256/4-1,d0
14$ move.l (a0)+,(a2)+
dbra d0,14$
rts
*
* Einstellungen setzen
*
SetPrefs move.w PNormalCycles,NormalCycles
move.w PBadLineCycles,BadLineCycles
move.w PCIACycles,CIACycles
move.w PJoystick1On,Joystick1On
move.w PJoystick2On,Joystick2On
move.w PJoystickSwap,JoystickSwap
move.w PDrv8IsIEC,Drv8IsIEC
move.w PDrv9IsIEC,Drv9IsIEC
move.w PDrv10IsIEC,Drv10IsIEC
move.w PDrv11IsIEC,Drv11IsIEC
move.w POtherIEC,OtherIEC
move.w PCollisions,Collisions
move.w POverscan,Overscan
move.w PMapSlash,MapSlash
move.w PFastReset,FastReset
move.w PSkipLatch,SkipLatch
bne 2$
move.w #1,SkipLatch ;Keine Null zulassen
2$
tst.w PrefsFromEmul
bne 1$
move.l PDisplayID,DisplayID ;Nur beim Start
move.w PScreenType,ScreenType
1$
lea PDir8,a0
lea Dir8,a1
moveq #256/4-1,d0
11$ move.l (a0)+,(a1)+
dbra d0,11$
lea PDir9,a0
lea Dir9,a1
moveq #256/4-1,d0
12$ move.l (a0)+,(a1)+
dbra d0,12$
lea PDir10,a0
lea Dir10,a1
moveq #256/4-1,d0
13$ move.l (a0)+,(a1)+
dbra d0,13$
lea PDir11,a0
lea Dir11,a1
moveq #256/4-1,d0
14$ move.l (a0)+,(a1)+
dbra d0,14$
move.w PUseSIDCard,UseSIDCard
jsr ChangedSID
move.w PKeyboardYZ,KeyboardYZ
jmp ChangedKeys
*
* Einstellungen holen
*
GetPrefs move.w NormalCycles,PNormalCycles
move.w BadLineCycles,PBadLineCycles
move.w CIACycles,PCIACycles
move.w Joystick1On,PJoystick1On
move.w Joystick2On,PJoystick2On
move.w JoystickSwap,PJoystickSwap
move.w UseSIDCard,PUseSIDCard
move.w Drv8IsIEC,PDrv8IsIEC
move.w Drv9IsIEC,PDrv9IsIEC
move.w Drv10IsIEC,PDrv10IsIEC
move.w Drv11IsIEC,PDrv11IsIEC
move.w OtherIEC,POtherIEC
move.w KeyboardYZ,PKeyboardYZ
move.w Collisions,PCollisions
move.w Overscan,POverscan
move.w MapSlash,PMapSlash
move.w FastReset,PFastReset
move.l DisplayID,PDisplayID
move.w ScreenType,PScreenType
move.w SkipLatch,PSkipLatch
lea Dir8,a0
lea PDir8,a1
moveq #256/4-1,d0
11$ move.l (a0)+,(a1)+
dbra d0,11$
lea Dir9,a0
lea PDir9,a1
moveq #256/4-1,d0
12$ move.l (a0)+,(a1)+
dbra d0,12$
lea Dir10,a0
lea PDir10,a1
moveq #256/4-1,d0
13$ move.l (a0)+,(a1)+
dbra d0,13$
lea Dir11,a0
lea PDir11,a1
moveq #256/4-1,d0
14$ move.l (a0)+,(a1)+
dbra d0,14$
rts
*
* Einstellungen speichern
*
SaveThePrefs bsr GetGadgets
move.l _DOSBase,a6 ;Datei öffnen
move.l #PrefsFileName,d1
move.l #MODE_NEWFILE,d2
JSRLIB Open
move.l d0,d6
beq 2$
move.l d6,d1 ;Einstellungen schreiben
move.l #ThePrefs,d2
move.l #PrefsLength,d3
JSRLIB Write
move.l d6,d1 ;Datei schließene
JSRLIB Close
move.l _IconBase,a6 ;Icon bereits vorhanden?
lea PrefsFileName,a0
JSRLIB GetDiskObject
tst.l d0
beq 1$
move.l d0,a0 ;Ja, dann nichts machen
JSRLIB FreeDiskObject
rts
1$ lea PrefsFileName,a0 ;Nein, Icon erzeugen
lea PrefsIcon,a1
JSRLIB PutDiskObject
2$ rts
*
* Requester entsprechend dem Rückgabewert von ChangedIEC anzeigen
* d0: Rückgabewert
*
IECErrorReq tst.l d0
beq 1$
cmp.l #1,d0
bne 2$
lea NoParPortReq,a1
bra 3$
2$ lea NoTimerReq,a1
3$ move.l a6,-(sp)
move.l _IntuitionBase,a6
sub.l a0,a0
move.l a0,a2
move.l a0,a3
JSRLIB EasyRequestArgs
move.l (sp)+,a6
1$ rts
*
* Zufallsbyte ermitteln (0..255)
* d0: Ergebnis als 32-Bit-Wert (MSW muß Null sein!)
*
Random move.l RandomSeed,d1
mulu.l #2311,d1
add.l #25367,d1
divul.l #120050,d0:d1 ;Rest nach d0
move.l d0,RandomSeed
lsl.l #8,d0
divu.l #120050,d0
rts
*
* Strings in Datenstrukturen lokalisieren
*
GetStr MACRO ;Label
lea TheLocale,a0
move.l #\1,d0
jsr GetString
ENDM
Localize move.l _UtilityBase,a6
GetStr MSG_REQTITLE
move.l d0,ErrorReq+es_Title
move.l d0,NoParPortReq+es_Title
move.l d0,NoTimerReq+es_Title
GetStr MSG_SCREENTITLE
move.l d0,d2
lea PrefsWindowTags,a0
move.l #WA_ScreenTitle,d0
JSRLIB FindTagItem
move.l d0,a0
move.l d2,4(a0)
GetStr MSG_PREFSTITLE
move.l d0,d2
lea PrefsWindowTags,a0
move.l #WA_Title,d0
JSRLIB FindTagItem
move.l d0,a0
move.l d2,4(a0)
GetStr MSG_REQGADS
move.l d0,ErrorReq+es_GadgetFormat
GetStr MSG_REQGADS2
move.l d0,NoParPortReq+es_GadgetFormat
move.l d0,NoTimerReq+es_GadgetFormat
GetStr MSG_NOPARPORT
move.l d0,NoParPortReq+es_TextFormat
GetStr MSG_NOTIMER
move.l d0,NoTimerReq+es_TextFormat
GetStr MSG_SCREENHAIL
move.l d0,ScreenHailText
move.l d0,CyberHailText
GetStr MSG_DIRHAIL
move.l d0,DirHailText
lea GadTransTable,a2
lea PrefsNGads,a3
1$ lea TheLocale,a0
move.l (a2)+,d0
beq 2$
jsr GetString
move.l (a2)+,d1
mulu.l #gng_SIZEOF,d1
move.l d0,gng_GadgetText(a3,d1.w)
bra 1$
2$ rts
GadTransTable dc.l MSG_OK_GAD,GDX_OK
dc.l MSG_SAVE_GAD,GDX_Save
dc.l MSG_CANCEL_GAD,GDX_Cancel
dc.l MSG_JOYSTICK1ON_GAD,GDX_Joystick1On
dc.l MSG_JOYSTICK2ON_GAD,GDX_Joystick2On
dc.l MSG_JOYSTICKSWAP_GAD,GDX_JoystickSwap
dc.l MSG_GETDISPLAYID_GAD,GDX_GetDisplayID
dc.l MSG_DISPLAYID_GAD,GDX_DisplayID
dc.l MSG_SCREENTYPE_GAD,GDX_ScreenType
dc.l MSG_NORMALCYCLES_GAD,GDX_NormalCycles
dc.l MSG_BADLINECYCLES_GAD,GDX_BadLineCycles
dc.l MSG_CIACYCLES_GAD,GDX_CIACycles
dc.l MSG_DIR8_GAD,GDX_Dir8
dc.l MSG_DIR9_GAD,GDX_Dir9
dc.l MSG_DIR10_GAD,GDX_Dir10
dc.l MSG_DIR11_GAD,GDX_Dir11
dc.l MSG_USESIDCARD_GAD,GDX_UseSIDCard
dc.l MSG_OTHERIEC_GAD,GDX_OtherIEC
dc.l MSG_KEYBOARDYZ_GAD,GDX_KeyboardYZ
dc.l MSG_COLLISIONS_GAD,GDX_Collisions
dc.l MSG_MAPSLASH_GAD,GDX_MapSlash
dc.l MSG_FASTRESET_GAD,GDX_FastReset
dc.l MSG_SKIPLATCH_GAD,GDX_SkipLatch
dc.l 0,0
**
** Konstanten
**
; Strings
Version VERSTAG
UtilityName dc.b "utility.library",0
IntuiName dc.b "intuition.library",0
GfxName dc.b "graphics.library",0
GadToolsName dc.b "gadtools.library",0
AslName dc.b "asl.library",0
IconName dc.b "icon.library",0
LocaleName dc.b "locale.library",0
SID6581Name dc.b "6581sid.library",0
CyberGfxName dc.b "cybergraphics.library",0
CiaResName dc.b "ciaa.resource",0
MiscResName dc.b "misc.resource",0
CatalogName dc.b "Frodo.catalog",0
PrefsFileName dc.b "PROGDIR:Frodo Prefs",0
BasicFileName dc.b "PROGDIR:Basic ROM",0
KernalFileName dc.b "PROGDIR:Kernal ROM",0
CharFileName dc.b "PROGDIR:Char ROM",0
Template dc.b "TURBO=TURBOCYBER/S",0
TurboToolType dc.b "TURBOCYBER",0
CNOP 0,4
**
** Datenbereich
**
_UtilityBase dc.l 0
_IntuitionBase dc.l 0
_GfxBase dc.l 0
_GadToolsBase dc.l 0
_AslBase dc.l 0
_IconBase dc.l 0
_EGSBase dc.l 0
_VilIntuiBase dc.l 0
_CyberGfxBase dc.l 0
_HRGSystemBase dc.l 0
_SID6581Base dc.l 0
_CiaBase dc.l 0
_MiscBase dc.l 0
TheLocale ;Struktur für GetString
_LocaleBase dc.l 0
TheCatalog dc.l 0
MainTask dc.l 0 ;Emulator-Haupttask
TurboCyber dc.l 0 ;Argumente (Reihenfolge ist wichtig!)
RandomSeed dc.l 0 ;Basis für Zufallsgenerator
ScreenRequester dc.l 0 ;ScreenMode-Requester
DirRequester dc.l 0 ;Directory-Requester
RAMBlock dc.l 0 ;Zeiger auf Speicherbereich
TheClass dc.l 0 ;Für Preferences
TheGadget dc.l 0
TheCode dc.w 0
PrefsFromEmul dc.w 0 ;#0: Einstellungen vom Emulator aus aufgerufen
; Prefs-Icon
PrefsIcon dc.w WB_DISKMAGIC,WB_DISKVERSION
dc.l 0
dc.w 0,0,54,23
dc.w 4,1,1
dc.l PrefsI1,0,0,0,0
dc.w 0
dc.l 1
dc.b WBPROJECT,0
dc.l 0,0
dc.l NO_ICON_POSITION,NO_ICON_POSITION
dc.l 0,0,0
; Image für Prefs-Icon
PrefsI1 dc.w 0,0,54,22,8
dc.l PrefsI1Data
dc.b 255,0
dc.l 0
; Requester
ErrorReq dc.l 20,0,0,0,0
NoParPortReq dc.l 20,0,0,0,0
NoTimerReq dc.l 20,0,0,0,0
; Tags zum Setzen von Gadgets
SetDir8Tags dc.l GTST_String,PDir8
dc.l 0,0
SetDir9Tags dc.l GTST_String,PDir9
dc.l 0,0
SetDir10Tags dc.l GTST_String,PDir10
dc.l 0,0
SetDir11Tags dc.l GTST_String,PDir11
dc.l 0,0
SetIntegerTags dc.l GTIN_Number
SetIntTagsVal dc.l 0
dc.l 0,0
SetCheckTags dc.l GTCB_Checked,-1
dc.l 0,0
SetCycleTags dc.l GTCY_Active
SetCycTagsVal dc.l 0
dc.l 0,0
SetDIDTags dc.l GTTX_Text,ModeNameBuf+16
dc.l 0,0
DisableTags dc.l GA_Disabled,-1
dc.l 0,0
EnableTags dc.l GA_Disabled,0
dc.l 0,0
; Tags für ScreenMode-Requester
ScreenReqTags dc.l ASLSM_TitleText
ScreenHailText dc.l 0
dc.l ASLSM_SleepWindow,-1
dc.l ASLSM_DoOverscanType,-1
dc.l ASLSM_PropertyMask,DIPF_IS_HAM|DIPF_IS_EXTRAHALFBRITE|DIPF_IS_DUALPF
dc.l ASLSM_PropertyFlags,0
dc.l 0,0
DoScreenReqTags dc.l ASLSM_InitialDisplayID
ScreenReqID dc.l 0
dc.l ASLSM_InitialOverscanType
ScreenReqOScan dc.l 0
dc.l ASLSM_Window
ScreenReqWindow dc.l 0
dc.l 0,0
DoCyberReqTags dc.l CYBRMREQ_Screen
CyberReqScreen dc.l 0
dc.l CYBRMREQ_WinTitle
CyberHailText dc.l 0
dc.l CYBRMREQ_MinWidth,384
dc.l CYBRMREQ_MinHeight,272
dc.l CYBRMREQ_MaxDepth,8
dc.l 0,0
; Tags für den Directory-Requester
DirReqTags dc.l ASLFR_TitleText
DirHailText dc.l 0
dc.l ASLFR_SleepWindow,-1
dc.l ASLFR_Flags2,FRF_REJECTICONS|FRF_DRAWERSONLY
dc.l 0,0
DoDirReqTags dc.l ASLFR_InitialDrawer,DirName
dc.l ASLFR_Window
DirReqWindow dc.l 0
dc.l 0,0
**
** Icon-Daten
**
SECTION "CHIPDATA",DATA,CHIP
PrefsI1Data dc.w $0000,$0000,$0000,$0400,$0000,$0000,$0000,$0C00
dc.w $0003,$FFC0,$0000,$0C00,$000C,$0030,$0000,$0C00
dc.w $0010,$7E08,$0000,$0C00,$0020,$8104,$0000,$0C00
dc.w $0020,$4104,$0000,$0C00,$0020,$4104,$0000,$0C00
dc.w $0010,$8204,$0000,$0C00,$000F,$0C08,$0000,$0C00
dc.w $0000,$3010,$0000,$0C00,$0000,$4060,$0000,$0C00
dc.w $0000,$8180,$0000,$0C00,$0001,$0E00,$0000,$0C00
dc.w $0000,$8400,$0000,$0C00,$0000,$7800,$0000,$0C00
dc.w $0000,$8400,$0000,$0C00,$0000,$8400,$0000,$0C00
dc.w $0000,$7800,$0000,$0C00,$0000,$0000,$0000,$0C00
dc.w $0000,$0000,$0000,$0C00,$7FFF,$FFFF,$FFFF,$FC00
dc.w $FFFF,$FFFF,$FFFF,$F800,$D555,$5557,$D555,$5000
dc.w $D554,$001F,$F555,$5000,$D553,$FFCF,$F555,$5000
dc.w $D54F,$81F7,$F555,$5000,$D55F,$54FB,$F555,$5000
dc.w $D55F,$94FB,$FFD5,$5000,$D55F,$94F9,$7FF5,$5000
dc.w $D54F,$55F9,$7FD5,$5000,$D550,$53F5,$7FD5,$5000
dc.w $D555,$4FE5,$5F55,$5000,$D555,$3F95,$60D5,$5000
dc.w $D555,$7E7D,$6055,$5000,$D554,$F1FD,$6035,$5000
dc.w $D555,$79FF,$FFD5,$5000,$D555,$05FF,$F555,$5000
dc.w $D555,$797F,$F555,$5000,$D555,$797F,$F555,$5000
dc.w $D555,$055F,$F555,$5000,$D555,$5557,$D555,$5000
dc.w $D555,$5555,$5555,$5000,$8000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$000F,$E000,$0000
dc.w $0000,$0007,$E000,$0000,$0000,$0003,$E000,$0000
dc.w $0000,$0000,$6000,$0000,$0000,$0000,$1FC0,$0000
dc.w $0000,$0000,$1F80,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0070,$1F80,$0000,$0000,$00F0,$1FC0,$0000
dc.w $0000,$00FC,$6000,$0000,$0000,$007F,$E000,$0000
dc.w $0000,$003F,$E000,$0000,$0000,$001F,$E000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$000F,$E000,$0000
dc.w $0000,$0007,$E000,$0000,$0000,$0003,$E000,$0000
dc.w $0000,$0000,$6000,$0000,$0000,$0000,$1FC0,$0000
dc.w $0000,$0000,$1F80,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0070,$1F80,$0000,$0000,$00F0,$1FC0,$0000
dc.w $0000,$00FC,$6000,$0000,$0000,$007F,$E000,$0000
dc.w $0000,$003F,$E000,$0000,$0000,$001F,$E000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$000F,$E000,$0000
dc.w $0000,$0007,$E000,$0000,$0000,$0003,$E000,$0000
dc.w $0000,$0000,$6000,$0000,$0000,$0000,$1FC0,$0000
dc.w $0000,$0000,$1F80,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0070,$1F80,$0000,$0000,$00F0,$1FC0,$0000
dc.w $0000,$00FC,$6000,$0000,$0000,$007F,$E000,$0000
dc.w $0000,$003F,$E000,$0000,$0000,$001F,$E000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$000F,$E000,$0000
dc.w $0000,$0007,$E000,$0000,$0000,$0003,$E000,$0000
dc.w $0000,$0000,$6000,$0000,$0000,$0000,$1FC0,$0000
dc.w $0000,$0000,$1F80,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0070,$1F80,$0000,$0000,$00F0,$1FC0,$0000
dc.w $0000,$00FC,$6000,$0000,$0000,$007F,$E000,$0000
dc.w $0000,$003F,$E000,$0000,$0000,$001F,$E000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$000F,$E000,$0000
dc.w $0000,$0007,$E000,$0000,$0000,$0003,$E000,$0000
dc.w $0000,$0000,$6000,$0000,$0000,$0000,$1FC0,$0000
dc.w $0000,$0000,$1F80,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0070,$1F80,$0000,$0000,$00F0,$1FC0,$0000
dc.w $0000,$00FC,$6000,$0000,$0000,$007F,$E000,$0000
dc.w $0000,$003F,$E000,$0000,$0000,$001F,$E000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$000F,$E000,$0000
dc.w $0000,$0007,$E000,$0000,$0000,$0003,$E000,$0000
dc.w $0000,$0000,$6000,$0000,$0000,$0000,$1FC0,$0000
dc.w $0000,$0000,$1F80,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$1F00,$0000
dc.w $0000,$0070,$1F80,$0000,$0000,$00F0,$1FC0,$0000
dc.w $0000,$00FC,$6000,$0000,$0000,$007F,$E000,$0000
dc.w $0000,$003F,$E000,$0000,$0000,$001F,$E000,$0000
dc.w $0000,$0007,$C000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
**
** Nicht initialisierte Daten
**
SECTION "BSS",BSS
ModeNameBuf ds.b nif_SIZEOF ;Puffer für GetDisplayInfoData
DirName ds.b 256 ;Puffer für Directory-Requester
; Einstellungen
ThePrefs
Pdummy ds.w 1
PNormalCycles ds.w 1
PBadLineCycles ds.w 1
PCIACycles ds.w 1
PJoystick1On ds.w 1
PJoystick2On ds.w 1
PJoystickSwap ds.w 1
PDisplayID ds.l 1
PScreenType ds.w 1
PDir8 ds.b 256
PDir9 ds.b 256
PDir10 ds.b 256
PDir11 ds.b 256
PDrv8IsIEC ds.w 1
PDrv9IsIEC ds.w 1
PDrv10IsIEC ds.w 1
PDrv11IsIEC ds.w 1
PUseSIDCard ds.w 1
POtherIEC ds.w 1
PKeyboardYZ ds.w 1
PCollisions ds.w 1
POverscan ds.w 1
PMapSlash ds.w 1
PFastReset ds.w 1
PSkipLatch ds.w 1
PrefsLength = *-ThePrefs
FastReset ds.w 1 ;Prefs: Speichertest bei Reset abschalten
END